package com.bsj.power.system.service;

import com.bsj.power.common.config.global.JsonResult;
import com.bsj.power.common.config.global.TokenUser;
import com.bsj.power.common.def.dto.PageDTO;
import com.bsj.power.common.def.entity.user.User;
import com.bsj.power.common.def.dto.user.UserAddDTO;
import com.bsj.power.common.def.dto.user.UserModifyPasswordDTO;
import com.bsj.power.common.def.vo.web.system.user.UserVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author yinhao
 * @version 1.0
 * @description 用户
 * @date 2024/4/22
 */
public interface UserService {

    /**
     * 用户登录
     *
     * @param username
     * @param password
     * @return
     */
    JsonResult login(String username, String password, HttpServletRequest request);

    /**
     * 更新密码
     *
     * @param dto
     * @return
     */
    int modifyPassWord(UserModifyPasswordDTO dto,String ip);

    /**
     * 重置密码
     *
     * @param userId
     * @return
     */
    String resetPassword(Long userId,String ip);

    /**
     * 新增用户
     *
     * @param dto
     * @return
     */
    Long addAndUpdateUser(UserAddDTO dto,String ip);

    /**
     * 删除用户
     *
     * @param userId
     * @return
     */
    Integer deleteUser(Long userId,String ip);

    /**
     * 新增用户
     *
     * @param user
     * @param roleId
     * @return 用户ID
     */
    Long addUser(User user, Long roleId);

    /**
     * 修改用户
     *
     * @param user
     * @param roleId
     * @return 用户ID
     */
    Long updateUser(User user, Long roleId);

    /**
     * 分页获取用户列表
     *
     * @param dto
     * @return
     */
    JsonResult<List<UserVO>> pageUserList(PageDTO dto, String userName,String loginId,Integer groupId);

    /**
     * 设置访问权限
     *
     * @param userId
     * @param isAccess
     * @return com.bsj.power.common.config.global.JsonResult
     * @author ljx
     * @time 2024/9/2 15:41
     */
    JsonResult setAccessAuth(Long userId, Integer isAccess,String ip);

    /**
     * 获取登录用户信息
     *
     * @param sessionId
     * @return com.bsj.power.common.config.global.TokenUser
     * @author ljx
     * @time 2024/9/2 16:47
     */
    TokenUser getLoginInfo(String sessionId);

    /**
     * 取消锁定
     *
     * @param userId
     * @return com.bsj.power.common.config.global.JsonResult
     * @author ljx
     * @time 2024/9/27 15:09
     */
    JsonResult cancelLock(Integer userId,String ip);
}
